<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title></title>
</head>
<body>

<script type="text/javascript">
	/*
		js有两种数据类型

		1.基本数据类型  栈
		  number 数字类型 js不区分整形和浮点型
		  	     infinity 正无穷大
		  	     -infinity 负无穷大
		  	     NaN : not a number 不是一个数字
		  String 字符串类型 单引号/双引号包裹住的就是字符串
		  		 .length 获取字符串长度
		  boolean 布尔类型 true flase
		  		  主要用在逻辑判断上

		  undefined 未定义
		  		   声明变量为赋值，它的值就是undefined\
		  		   只有一个值 undefined
		  null  空类型 是一个空的指针对象 表示用来保存值的但是还没真正保存
		  		返回的是object类型                     
		  symbol 独一无二的值

		2.复杂数据类型  堆
		  object 对象
		  array  数组
		  function 函数


		  typeof 用来判断变量的数据类型
		  栈内存与堆内存的优缺点：
		  		在js中
		  		基本数据类型变量大小固定 并且操作容易简单 所所以放到栈内存中存储 先进后出
		  		引用数据类型 大小不固定 放到堆里 根据自己的内存空间大小分配空间

		  		复杂数据类型 值 保存在堆内存中，栈内存里存的是一个指针地址，这个指针指向的内存中的一个位置 这个位置就是保存 值 的地方

		  		优缺点：栈内存系统效率比较高，堆内存需要分配空间和地址，还需要将地址存到栈上，效率低于栈
	*/

	let n1 = 10
	let n2 = 10.99
	let n3 = -10
	let n4 = Infinity //正无穷
	let n5 = -Infinity //负无穷
	let n6 = NaN      //非数字
	let n7 = 6e3      //6*10 的三次方
	console.log(typeof n1) //number
	console.log(typeof n2) //number
	console.log(typeof n3) //number
	console.log(typeof n4) //number
	console.log(typeof n5) //number
	console.log(typeof n6) //number
	console.log(typeof n7) //number

	//注意：在js中进行精度比较高的运算时-----数据精度问题
	//比如：0.1+0.2  计算机运算采用二进制底层用了会导致个别出现很多小数的情况需要特殊处理
	let a = 0.1
	let b = 0.2
	console.log(a + b)
	//根据精度，先放大10n倍，运算完，再除以10n
	console.log("--------------------------------")

	//String
	let s1 = '   '
	let s2 = '12'
	let s3 = ""
	console.log(typeof s1, s1.length) //String
	console.log(typeof s2, s2.length) //String
	console.log(typeof s3, s3.length) //String

	let s4 = 1 + "1" //如果运算中有无字符串，并且为+ 发生的为字符串拼接
	console.log(s4, typeof s4, s4.length) //String
	console.log("--------------------------------")

	//Boolean
	let b1 = true
	console.log(typeof b1) //boolean
	let b2 = 1 > 2
	console.log(b2) //false
	
	console.log("--------------------------------")
	let u1
	console.log(u1) //undefined
	console.log("--------------------------------")
	//null
	let nu = null
	console.log(typeof nu)


	//object
	let obj = {
		name:"张三",
		age:18
	}
	console.log(obj.name)
	console.log(typeof obj)

	//array
	let arr = [1, true, undefined, 'hello', null, {name:
"张三"}]
    let arr2 
	console.log(typeof arr)//object
	// Array.isArray判断是不是一个数组 是返回true不是则false
	console.log(Array.isArray(arr)) //true
	//根据下标取值
	console.log(arr[0])

	arr2
</script>
</body>
</html>